#!/bin/bash

BACKTITLE="DIGITEL - Installation et configuration du système de base CentOS"
WELCOME_TITLE="Bienvenue"
WELCOME_MSG="Ce programme va installer les composants de base et configurer le système CentOS 5.6 pour Freeswitch et Django"
HOSTNAME=$(hostname -s)
DOMAINNAME=$(dnsdomainname)
IPADDRESS=$(ifconfig | grep "inet adr" -m 1 | sed -e "s/^.*inet adr:\(\([0-9]\{1,3\}\.\)\{3\}[0-9]\{1,3\}\).*$/\1/")

input_box_with_validation() {
        # $1 Variable à affecter
        # $2 Titre d'arrière plan 
        # $3 Titre
        # $4 Invite
        # $5 Valeur initiale
        # $6 expression régulière de validation
        # $7 message d'erreur de saisie

        VAR=$(whiptail --fb --backtitle "${2}" --title "${3}" --inputbox "${4}" 15 50 ${5} 3>&1 1>&2 2>&3)
        [[ "$?" != "0" ]] && exit 0
        while [[ ! "${VAR}" =~ ${6} ]]
        do
                whiptail --fb --backtitle "${2}" --title "${3}" --msgbox "${7}" 15 50
                VAR=$(whiptail --fb --backtitle "${2}" --title "${3}" --inputbox "${4}" 15 50 ${5} 3>&1 1>&2 2>&3)
                [[ "$?" != "0" ]] && exit 0
        done
        eval ${1}=${VAR}
}

# Accueil de l'installeur
whiptail --fb --backtitle "${BACKTITLE}" --title "${WELCOME_TITLE}" --msgbox "${WELCOME_MSG}" 15 60

# Ajout de rpmforge pour les paquets additionnels, mise à jour du système, installation des paquets généralistes nécessaires et configuration réseau/sécurité
whiptail --fb --backtitle "${BACKTITLE}" --title "Ajout de RPMForge" --yesno "Voulez-vous installer les dépôts supplémentaires RPMForge, mettre à jour le système et installer les paquets nécessaires ?" 15 60
if [[ "$?" = "0" ]]
then
    rpm -Uhv "http://ftp-stud.fht-esslingen.de/dag/redhat/el5/en/i386/rpmforge/RPMS/rpmforge-release-0.5.2-2.el5.rf.i386.rpm"
    yum -y upgrade
    yum -y install vim-enhanced system-config-securitylevel-tui system-config-network-tui wget man ngrep wireshark
    system-config-network-tui
    system-config-securitylevel-tui
fi 

whiptail --fb --backtitle "${BACKTITLE}" --title "Changement de shell" --yesno "Voulez-vous configurer et installer ZSH comme shell par déjaut ?" 15 60
if [[ "$?" = "0" ]]
then
    yum -y install zsh
    pushd /tmp
    if [[ -a fichiers-config.tar.gz ]]
        then rm -f fichiers-config.tar.gz
    fi
    wget formation-debian.via.ecp.fr/fichiers-config.tar.gz
    tar xvzf fichiers-config.tar.gz
    cp -f fichiers-config/z* /etc/
    rm -fr fichiers-config* 
    popd
    chsh -s /bin/zsh
fi

whiptail --fb --backtitle "${BACKTITLE}" --title "Installation du serveur DNS" --yesno "Voulez-vous configurer et installer BIND9 ?" 15 60
if [[ "$?" = "0" ]]
then
    yum -y install bind bind-chroot bind-libs bind-utils
    
    hostname_regex="^[a-zA-Z0-9-]+$"
    input_box_with_validation "CHOSEN_HOSTNAME" "${BACKTITLE}" "Nom d'hôte" "Entrez le nom d'hôte du serveur" "${HOSTNAME}" "${hostname_regex}" "Veuillez entrer un nom d'hôte valide !"
    
    domainname_regex="^([a-zA-Z0-9-]+\.)+[a-zA-Z0-9]+$"
    input_box_with_validation "CHOSEN_DOMAIN" "${BACKTITLE}" "Nom de domaine" "Entrez le nom du domaine à gérer :" "${DOMAINNAME}" "${domainname_regex}" "Veuillez entrer un nom de domaine valide !"
    
    ip_regex="^(((25[0-5]|2[0-4][0-9]|[0-1]?[0-9][0-9]?)\.){3}(25[0-5]|2[0-4][0-9]|[0-1]?[0-9][0-9]?))$"
    input_box_with_validation "CHOSEN_IP" "${BACKTITLE}" "Adresse IP" "Entrez votre adresse IP :" "${IPADDRESS}" "${ip_regex}" "Veuillez entrer une adresse IP valide !"
    # Synthèse et configuation de Bind9
    echo "Choix du nom d'hôte : ${CHOSEN_HOSTNAME}"
    echo "Choix de domaine : ${CHOSEN_DOMAIN}"
    echo "Choix de l'IP : ${CHOSEN_IP}"
    echo "options {
    directory \"/var/named\";
    pid-file \"/var/run/named/named.pid\";
    recursion yes;
};

zone \"${CHOSEN_DOMAIN}\" {
    type master;
    file \"${CHOSEN_DOMAIN}.zone\";
};" > /var/named/chroot/etc/named.conf

    echo "\$ttl 38400
@   IN SOA  ns.${CHOSEN_DOMAIN}.   root.localhost. (
		$(date +"%Y%m%d")01  ; serial
		10800       ; refresh
		3600        ; retry
		604800      ; expiry
		38400 )     ; minimum

		NS	ns.${CHOSEN_DOMAIN}.
		A	${CHOSEN_IP}
ns		A	${CHOSEN_IP}
${CHOSEN_HOSTNAME}		A	${CHOSEN_IP}" > /var/named/chroot/var/named/${CHOSEN_DOMAIN}.zone
    system-config-network-tui
    service network restart
    service named restart
    chkconfig named on
fi

whiptail --fb --backtitle "${BACKTITLE}" --title "Installation du serveur de temps" --yesno "Voulez-vous configurer et installer NTPD ?" 15 60
if [[ "$?" = "0" ]]
then
    yum -y install ntp
    ntpdate -u pool.ntp.org
    service ntpd start
    chkconfig ntpd on
fi

whiptail --fb --backtitle "${BACKTITLE}" --title "Installation du client DynDNS" --yesno "Voulez-vous configurer et installer DDCLIENT ?" 15 60
if [[ "$?" = "0" ]]
then
        yum -y install ddclient 

        login_regex="^.+$"
        input_box_with_validation "DYNDNS_LOGIN" "${BACKTITLE}" "Login EuroDNS" "Entrez le login du compte Eurodns" "" "${login_regex}" "Veuillez entrer un nom d'hôte valide !"

        DYNDNS_PASSWORD="A"
        DYNDNS_PASSWORD2="B"
        FT="yes"
        while [[ "${DYNDNS_PASSWORD}" != "${DYNDNS_PASSWORD2}" ]]
        do
                if [[ "${FT}" = "no" ]]
                then
                        whiptail --fb --backtitle "${BACKTITLE}" --title "Mot de passe EuroDNS" --msgbox "Les mots de passe ne concordent pas, veuillez recommencer !" 15 60
                fi
                DYNDNS_PASSWORD=$(whiptail --fb --backtitle "${BACKTITLE}" --title "Mot de passe EuroDNS" --passwordbox "Veuillez entrer votre mot de passe EuroDNS" 15 50 ${5} 3>&1 1>&2 2>&3)
                DYNDNS_PASSWORD2=$(whiptail --fb --backtitle "${BACKTITLE}" --title "Mot de passe EuroDNS" --passwordbox "Veuillez répéter votre mot de passe" 15 50 ${5} 3>&1 1>&2 2>&3)
                FT="no"
        done

        subdomain_regex="^([a-zA-Z0-9-]+\.)+[a-zA-Z0-9]+$"
        input_box_with_validation "DYNDNS_SUBDOMAIN" "${BACKTITLE}" "Nom de domaine" "Entrez le nom du sous-domaine dynamique :" "" "${subdomain_regex}" "Veuillez entrer un nom de domaine valide !"

        cp -f /etc/ddclient/ddclient.conf{,$(date +"%Y%m%d%H%M%S").back}
        echo "# Auto-generated config   
daemon=300                              # check every 300 seconds
syslog=yes                              # log update msgs to syslog
mail-failure=root                       # mail failed update msgs to root
pid=/var/run/ddclient.pid               # record PID in file.
ssl=yes                                 # use ssl-support.  Works with
                                        # ssl-library
protocol=dyndns2
use=if, if=eth0
server=eurodyndns.org
login=${DYNDNS_LOGIN}
password=${DYNDNS_PASSWORD}
${DYNDNS_SUBDOMAIN}" > /etc/ddclient/ddclient.conf
        service ddclient stop
        rm -f /var/cache/ddclient/ddclient.cache
        service ddclient start
        chkconfig ddclient on
fi

